Different types of memory technology have distinct properties, such as capacity, hardware cost, and latency. For example, volatile memory, such as dynamic random access memory (“DRAM”) typically offers relatively fast memory access but is more expensive in terms of bytes per dollar, and as such, is typically available in lower capacities in a compute device. By contrast, non-volatile flash memory (e.g., NAND memory) is less expensive than volatile memory, but is slower than volatile memory.
Real-time applications, such as in-memory databases are experiencing an explosive growth in memory capacity requirements. For example, an average in-memory database spans seven to eight terabytes of memory and others have reached up to 48 terabytes of memory in a single compute device. Given the cost of DRAM, it is beneficial for a workload (e.g., an application or process executed to provide services for a customer) to use only the amount of DRAM required to maintain some minimum guarantee of performance (e.g., the most frequently accessed data should be in DRAM, with other data in a slower type of memory). However, the precise amount of DRAM required is not known prior to execution of a workload, and the optimal amount of DRAM may change over time, as the workload performs different tasks. As such, by equipping a compute device with the peak amount of a particular type of memory (e.g., DRAM) that may be used by a workload at some point in its execution, that memory may be largely underutilized during the majority of the time the workload is executed, leading to wasted monetary resources that could have been invested elsewhere in a data center.